import path from 'path';
import cmd from 'commander';

// 解析日志级别参数
const LOG_LEVELS = ['trace', 'debug', 'info', 'warn', 'error', 'fatal'];

// 报错后退出
/* eslint no-console: 0 */
function exit(error, value) {
    console.error("\nerror: %s: '%s'\n", error, value);
    process.exit(1);
}

function parseLogLevel(level) {
    if (!LOG_LEVELS.includes(level)) {
        return exit('INVALID logging level', level);
    }
    return level.toUpperCase();
}

// 命令行参数
cmd.option('-c, --console-log [level]', '控制台日志', parseLogLevel)
    .option('-f, --file-log [level]', '文件日志', parseLogLevel)
    .option('-r, --roll-log [level]', '滚动日志', parseLogLevel)
    .option('-l, --log-dir <directory>', '滚动日志目录', 'log')
    .option('-p, --port <integer>', '服务器侦听端口', parseInt)
    .parse(process.argv);

// 日志配置预处理（为滚动日志目录设置绝对路径）
const root = process.cwd();
cmd.logDir = path.resolve(root, cmd.logDir);
cmd.logName = path.basename(root);

export default cmd;
